/*
 * 存储登录人信息
 */
import * as auth from '@/utils/auth.js'
import { login, getUserInfo, getUserDetailById } from '@/api/user.js'
import { resetRouter } from '@/router/index'
export default {
  namespaced: true,
  // 定义数据变量 state（全局共享） (和组件data类似：私有) 相同点：响应式(数据驱动试图)
  state: {
    token: auth.getToken() || null,
    // 当前登录人的信息
    userInfo: {}
  },
  // 修改state 定义的 数据(只能通过mutations 修改)
  mutations: {
    /**
     * 存token
     * @param {*} state
     * @param {*} token
     */
    setToken (state, token) {
      state.token = token
      auth.setToken(token)
    },
    removeToken (state) {
      state.token = null
      auth.removeToken()
    },
    // 设置用户信息
    setUserInfo (state, userInfo) {
      state.userInfo = userInfo
    },
    // 删除用户信息
    removeUserInfo (state) {
      state.userInfo = {}
    }
  },
  // 异步操作
  actions: {
    /**
     *
     * @param {*} ctx
     * @param {*} loginForm 登录表单数据
     */
    async userLogin (ctx, loginForm) {
      const res = await login(loginForm)
      ctx.commit('setToken', res)
    },
    async getUserInfoAction (ctx) {
      // 1.获取登录人信息
      const user = await getUserInfo()
      // 2. 获取登录人头像
      const photo = await getUserDetailById(user.userId)
      // console.log(user, photo)
      ctx.commit('setUserInfo', { ...user, ...photo })
      // 返回数据 外边调用，
      return user.roles
    },
    /**
     * 退出登录 =》删除token 和登录人user 信息
     * @param {*} param0
     */
    logoutAction ({ commit }) {
      commit('removeToken')
      commit('removeUserInfo')
      // 1.重置路由，避免缓存
      resetRouter()
      // 2.清除菜单数据 , 只留下静态路由
      // 跨模块使用方法 添加 { root: true }
      commit('menus/setList', [], { root: true })
    }
  }
}
